package login;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.先从请求中拿到用户名和密码
        //为了保证读出来的参数也能支持中文，要记得设置编码方式是 utf8
        req.setCharacterEncoding("utf8");
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        //2.验证用户名和密码是否正确
        if (username == null || password == null || username.equals("") || password.equals("")) {
            resp.setContentType("text/html;charset=utf8");
            resp.getWriter().write("当前输入的用户名和密码不能为空！");
            return;
        }
        //此处假设用户名只能是 zhangsan 或者是 lisi，密码都是123
        if (!username.equals("zhangsan") && !username.equals("lisi")) {
            //用户名有问题
            resp.setContentType("text/html;charset=utf8");
            resp.getWriter().write("用户名或者密码有误！");
            return;
        }
        if (!password.equals("123")) {
            //密码有问题
            resp.setContentType("text/html;charset=utf8");
            resp.getWriter().write("用户名或者密码有误");
            return;
        }
        //3. 用户名和密码都ok，此时就创建一个session会话，因为用户刚开始登录的时候是没有sessionId的
        //当前用户是未登录的状态，此时请求的cookie没有sessionId
        //此处的getSession是无法从服务器的 哈希表中查村到 该session对象的
        //此处的参数是设为true，是允许在getSession在查询不到的时候，创建新的session和sessionId的
        //并且会把这个session对象和sessionId 存储到哈希表中
        //同时返回这个session对象，并且在后续的响应中自动把这个sessionId返回给客户端浏览器
        HttpSession session = req.getSession(true);
        //然后让刚创建好的session对象存储自己写的自定义的数据，就可以在这个对象中存储用户的身份信息
        session.setAttribute("username",username);
        //session对象本身可以看成一个哈希表，可以存储键值对，key必须是String类型的，值是object类型的
        //4.登录成功之后，自动跳转到index主页
        resp.sendRedirect("index");
    }
}
/*验证用户登录做的几件事：
* 1.读取用户名和密码
* 2.验证密码是否正确（很可能要用数据库进行查询）
* 3.创建会话，保存必要的用户信息
* 4.重定向*/
